//
//  UIView+TS.swift
//  TSKit
//
//  Created by chenyusen on 2018/3/16.
//

import Foundation


// MARK: - 初始化扩展
public extension UIView {
    
    /// 快速构建一个带指定颜色的视图
    ///
    /// - Parameter backgroundColor: 指定颜色
    public convenience init(backgroundColor: UIColor?) {
        self.init()
        self.backgroundColor = backgroundColor
    }
    
    
    /// 快速构建一个带指定frame和指定颜色的视图
    ///
    /// - Parameters:
    ///   - frame: 指定frame
    ///   - color: 指定颜色
    public convenience init(frame: CGRect, color: UIColor) {
        self.init(frame: frame)
        backgroundColor = color
    }
}


// MARK: - 扩展属性
public extension UIView {
    
    
    /// 视图的宽度
    var width: CGFloat {
        get {
            return frame.width
        }
        set {
            frame.size.width = newValue
        }
    }
    
    
    /// 视图的高度
    var height: CGFloat {
        get {
            return frame.height
        }
        set {
            frame.size.height = newValue
        }
    }
    
    
    /// 视图顶边距离父视图顶边的距离
    var top: CGFloat {
        get {
            return frame.minY
        }
        set {
            frame.origin.y = newValue
        }
    }
    
    
    /// 视图左边距离父视图左边的距离
    var left: CGFloat {
        get {
            return frame.minX
        }
        set {
            frame.origin.x = newValue
        }
    }
    
    /// 视图底边距离父视图底边的距离
    var bottom: CGFloat {
        get {
            return top + height
        }
        set {
            top = newValue - height
        }
    }
    
    /// 视图右边距离父视图右边的距离
    var right: CGFloat {
        get {
            return left + width
        }
        set {
            left = newValue - width
        }
    }
    
    
    /// 视图相对父视图的端点
    var origin: CGPoint {
        get {
            return frame.origin
        }
        set {
            frame.origin = newValue
        }
    }
    
    
    /// 视图尺寸
    var size: CGSize {
        get {
            return frame.size
        }
        set {
            frame.size = newValue
        }
    }
    
    
    /// 视图中心点X方向相对父视图的位置
    var centerX: CGFloat {
        get {
            return center.x
        }
        set {
            center = CGPoint(x: newValue, y: centerY)
        }
    }
    
    /// 视图中心点Y方向相对父视图的位置
    var centerY: CGFloat {
        get {
            return center.y
        }
        set {
            center = CGPoint(x: centerX, y: newValue)
        }
    }
    
    
}

// MARK: - 方法扩展
public extension UIView {

    
    /// 当前试图所在的控制器
    public var viewController: UIViewController? {
        var responder = next
        repeat {
            if ((responder as? UIViewController) != nil) {
                return responder as? UIViewController
            } else {
                responder = responder?.next
            }
        } while responder != nil
        return nil
    }
    
    
    /// 获取当前试图继承树中最近的一个指定试图
    ///
    /// - Parameter viewType: 指定试图类型
    /// - Returns: 指定类型的父试图
    public func specifiedSuperview<T: UIView>(with viewType: T.Type) -> T? {
        var superview = self.superview
        repeat {
            if ((superview as? T) != nil) {
                return superview as? T
            } else {
                superview = superview?.superview
            }
        } while superview != nil
        return nil
    }
}
